package com.zyf.concurrency.chapter16;


/**
 * 不安全的延迟初始化（不要这么做）
 * 引自原文：
 *      假设线程A是第一个调用getInstance的线程。它将看到resource为null,并且初始化一个
 * 新的Resource,然后将resource设置为执行这个新实例。当线程B随后调用getInstance,它可
 * 能看到resource的值为非空，因此使用这个已经构造好的Resource。最初这看不出任何问题,
 * 但线程A写人resource的操作与线程B读取resource的操作之间不存在Happens-Before关系。
 * 在发布对象时存在数据竞争问题，因此B并不一定能看到Resource的正确状态。
 * create by yifeng
 */
public class UnsafeLazyInitialization {
    private static Resource resource;

    public static Resource getInstance() {
        if (resource == null)
            resource = new Resource();
        return resource;
    }

    static class Resource {}
}
